<html>
<head>
<title>18 数组</title>
</head>
<body>
	<script type="text/javascript">
		/*
		* 内建对象 ： 数组（Array）
		* 宿主对象
		* 自定义对象

		* 数组（Array）
		*	- 数组也是一个对象
		*	- 它和我们普通对象的功能类似，也是用来存储一些值的
		*	- 不同的是普通对象使用字符串作为属性名的，而我们的数组是使用数字来作为索引操作元素的
		*	- 索引：
		*		从 0 开始的整数就是索引
		* 	- 数组的存储性能比普通对象要好，在开发中我们经常使用数组来存储一些数据
		*/

		//创建数组对象
		var arr = new Array();
		console.log(typeof arr);

		/*
		* 向数组中添加元素
		* 语法： 数组[索引] = 值
		*/

		arr[0] = 10;
		arr[1] = 66;
		arr[2] = 88;
		arr[10] = 88;
		arr[100] = 88;

		console.log(arr);

		/*
		* 读取数组中的元素
		* 语法： 数组[索引]
		*/
		console.log(arr[1]);


		/*
		* 获取数组的长度
		* 对于连续的数组，使用length可以获取到数组的长度
		* 对于非连续的数组，使用lenght会获取到数组的最大的索引+1
		*	尽量不要创建连续的数组
		*/
		console.log(arr);
		console.log(arr.length);



		//使用字面量来创建数组
		// 语法 :[]
		var arr1 = [];
		console.log(typeof arr1);

		//使用字面量创建数组时，可以在创建时就指定数组中的元素
		var arr2 = [1,2,5,8,10,88];
		console.log(arr2);

		//创建一个数组中只有一个元素10
		arr3 = [10];
		//创建一个长度为10的数组
		arr4 = new Array(10);

		//数组的元素可以是任何类型
		arr5 = ["hello",1,true,null,undefined];
		console.log(arr5);

		//也可以是对象
		var obj = {name:"孙悟空"};
		arr5[arr5.length] = obj;

		console.log(arr5,arr5[5].name);

		//也可以是一个函数
		arr5 = [function(){alert(1)},function(){alert(2)}];
		console.log(arr5);


		//数组中也可以放数组，
		arr = [[1,2,3],[4,5,6]];
		console.log(arr);


		/*
		* forEach() 方法需要一个函数作为参数 （只支持IE8以上的浏览器）
		* 	- 像这种函数，由我们创建但是不由我们调用的，我们称为回调函数
		*	- 数组中有几个元素就会执行几次，每次执行时，浏览器会将遍历的元素以实参的形式传递进来，
				我们可以来定义形参，来读取这些内容
		*	- 浏览器会在回调函数中传递三个参数：
		*		第一个参数，就是当前正在遍历的元素
		*		第二个参数，就是当前正在遍历的元素的索引
		*		第三个参数，就是正在遍历的数组
		*/
		arr.forEach(function(value,index,arr_obj){
			console.log("value = "+value);
			console.log("index = "+index);
			console.log("正在遍历的数组 = "+arr_obj);
		})



		var numbers = [65, 44, 12, 4];

		function getSum(total, num) {
			console.log(total,num);
		    return total + num;
		}
		function myFunction(item) {
		    document.write(numbers.reduce(getSum)) ;

		}

		myFunction();
		
	</script>
</body>


</html>